fn main() {
    // 静态变量
    // 1、静态变量只能存储具有'static 生命周期的引用
    // 2、Rust编译器可以推断生命周期，不需要显式的注释
    // 3、静态变量在内存中有固定地址（使用该值将始终访问相同地址）
    // 4、常量可能在使用时复制其数据
    // 5、静态变量可以是可变的（和常量不一样）
    // 6、静态变量可以被fn函数捕获【变量只能被闭包捕获】

    // 声明不可变静态变量
    static NAME: &str = "张三";
    // 声明可变静态变量
    static mut NUM: i32 = 1;

    // 对应unsafe函数写上文档
    /// SAFETY: 这个函数只能单线程访问
    unsafe  fn foo(){
        NUM += 1;
    }
    unsafe {
        foo();
        // 编译器不允许创建指向静态变量的指针，只能通过原始指针访问
        println!("{}", *(&raw const NUM));
    }

      
}
